Implement Missouri Child Care Subsidy (CCS) program#8653
Draft
hua7450 wants to merge 5 commits into
Draft
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements Missouri's Child Care Subsidy under DESE, a provider-reimbursement subsidy with four geographic regions, age-based maximum daily rates by provider type (licensed center, registered center, licensed family home, group home, and six-or-fewer), special-needs rate add-ons, time-category-based units (full/half/ part-day), and a family-size copay tier with SMI minimum rate and minimum annual fee. Includes FPL-based initial and transitional income eligibility, activity and protective-services eligibility paths, and wires the state into the federal CCDF child_care_subsidy_programs registry and programs.yaml. Closes PolicyEngine#8652 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8653 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 1 16 +15
Lines 23 271 +248
==========================================
+ Hits 23 271 +248
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…CCS) - TCC funding multiplier applied to remaining base rate (base − fee) per 5 CSR 25-200.060 and Manual 2010.045.00 (transitional families only) - Sliding-fee copay tier keyed on adjusted gross income per CSR 25-200.060(3)(C)1 (25% SMI / $1-min floor remains on gross per Manual 2025.010) - Protective-services pathway bypasses income+activity per CSR 25-200.060(7)(B) - Incapacitated-parent need-for-care pathway added (is_disabled, Manual 2010.050.25) - Reference fixes: funding_rate + initial_eligibility repointed to current manual 2010.045.00; dropped stale EU-page ref on child_age_limit - Expanded test coverage (PS rates all providers, more rate cells, copay ladder) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…O CCS) Round 1 made the protective-services pathway bypass the income+activity tests, but mo_ccs_protective_services wrongly included is_homeless. Homelessness is a need-for-care reason (Manual 2010.050.35), NOT a CSR 25-200.060(7)(A) income-maximum exemption — so it must not bypass income. - Remove is_homeless from mo_ccs_protective_services (now foster | protective) - Add is_homeless as a need-for-care term in mo_ccs_activity_eligible, so homeless families satisfy need-for-care but still face the income test - Document is_disabled as a proxy for the incapacity attestation we don't track - Repoint dead Wayback manual references (2010.050.25/.05/.35) to working snapshots - Correct copay/tier/size_* descriptions to "adjusted gross income" - Add regression tests: homeless over-income -> ineligible; within-income -> eligible Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…items (MO CCS) Critical: - mo_ccs_time_category now reads childcare_hours_per_day (the chart's full/half/part thresholds are per day, not per week); update cascade across all 6 test files preserving each case's time category. References: - funding_rate / income fpl_rate transitional / income_eligible: cite 5 CSR 25-200.060(4)(C) Transitional Child Care and Manual 2010.045.00; fix pre-existing (3)(C) -> (4)(C) misreference in mo_ccs. Docs: - Note 85% SMI is the informational CCDF ceiling, infant/toddler special-needs rate equals base (deferred +25%), is_disabled proxy for the six-criteria special-needs definition, and job-search need not modeled. Tests: - Add TCC2 (0.60) and TCC3 (0.50) end-to-end funding cases, registered-center half/part rate cells, and a multi-child (special-needs + base) case. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements Missouri's Child Care Subsidy program, administered by the DESE Office of Childhood, in PolicyEngine. Missouri colloquially calls this program "CCAP," but the official name is the Child Care Subsidy; the implementation uses the
mo_ccs_variable prefix and lives undergov/states/mo/dese/ccs/accordingly.The subsidy is a provider-reimbursement childcare benefit: each eligible child's daily base reimbursement rate (looked up by region, provider type, age group, and time unit) is reduced by a sliding-fee copay, floored at zero, and capped at the family's actual childcare expense. Existing families above the traditional income limit can receive a phased-down ("transitional") subsidy.
Closes #8652
Regulatory Authority
Program Overview
Eligibility
mo_ccs_eligible_child—age < child_age_limit(13)mo_ccs_eligible_child—special_needs_child_age_limit(18) /special_needs_in_school_age_limit(19 whenis_in_k12_school)is_tax_unit_dependentinmo_ccs_eligible_childis_ccdf_immigration_eligible_childdefined_for = StateCode.MO(chains through eligibility vars)mo_ccs_eligibleand the income variablesmo_ccs_activity_eligible— head/spouse activity present (weekly_hours_worked > 0oris_full_time_student)mo_ccs_protective_services(is_in_foster_care,is_homeless,receives_or_needs_protective_services)is_ccdf_asset_eligible(effectively no resource test)mo_ccs_income_eligible(see Income)mo_ccs_eligible= has an eligible child & income-eligible & asset-eligible & (activity-eligible | protective services).Income
mo_ccs_countable_income) = monthly gross income (earned + unearned) of EU members, modeled via anaddslist of countable income sources (income/countable_income/sources.yaml).mo_ccs_adjusted_income) = countable gross −health_insurance_premiums, floored at 0. Medical-insurance premiums are the only deduction (5 CSR 25-200.050(2); Manual 2010.045.15).mo_ccs_enrolledSPMUnit boolean input (only enrolled recipients can use the >150% path).The manual's 45-item income-exclusions list (2010.045.10.05–.30) is modeled by omission:
sources.yamlenumerates only the ~14 countable PolicyEngine income variables, so any excluded type is simply absent from the list (the SC/WV pattern). Several excluded types have no PolicyEngine equivalent and so drop out automatically (e.g., LIHEAP/energy assistance, in-kind income, lump sums, tribal/restitution payments). Two excluded types cannot be split out cleanly and are documented as known limitations:veterans_benefits— we don't track the education-portion split at the moment, so gross veterans benefits are counted (a slight over-count).Benefit Calculation
mo_ccs_maximum_daily_benefit) is looked up by region (5) × provider type (5) × age group (3) × time unit (3) from the Daytime rate table. Special-needs/protective-services children use the PS rate column (rates/<provider>/special_needs.yaml).min(daily rate × attending days, per-child pre-subsidy expense)− sliding-fee copay, floored at 0 (mo_ccs). The total is also capped at the family'sspm_unit_pre_subsidy_childcare_expenses.transitional/funding_rate.yaml).mo_ccs_copay): a daily fee per child looked up by household size (1–20, viacopay/tier/size_N.yaml) × monthly income band, with per-unit fees varying by full / half / part day (copay/daily_fee/{full,half,part}_unit.yaml). A $1/year minimum applies to TANF-only income or income below 25% of State Median Income (minimum_annual_fee.yaml,smi_minimum_rate.yaml). Special-needs children are exempt from the sliding fee.Requirements Coverage
All 31 in-scope requirements are covered (106 tests pass). Out-of-scope rate-table differentials (evening/weekend, accreditation, +25% enhancement) and administrative provisions are listed under "Not Modeled."
eligibility/child_age_limitmo_ccs_eligible_childeligibility/mo_ccs_eligible_child(1–3)special_needs_child_age_limit,special_needs_in_school_age_limitmo_ccs_eligible_childmo_ccs_eligible_child(4,5,8,9)mo_ccs_eligible_childmo_ccs_eligible_child(7)is_ccdf_immigration_eligible_childmo_ccs_eligible_child(6)defined_for = StateCode.MOmo_ccs_eligibleincome/countable_income/sourcesmo_ccs_countable_incomeincome/mo_ccs_countable_incomemo_ccs_adjusted_incomeincome/mo_ccs_adjusted_incomeincome/fpl_rate/initial_eligibilitymo_ccs_income_eligiblemo_ccs_income_eligible(1–3)income/fpl_rate/transitionalmo_ccs_enrolled,mo_ccs_income_eligiblemo_ccs_income_eligible(4,5,9,10)income/countable_income/sourcesmo_ccs_countable_incomemo_ccs_countable_incomemo_ccs_activity_eligibleeligibility/mo_ccs_activity_eligibleis_ccdf_asset_eligiblemo_ccs_eligibleregion/region_1..4_countiesmo_ccs_regionmo_ccs_regionrates/<provider>/mo_ccs_provider_typemo_ccs_maximum_daily_benefit(1–5)age_group/agemo_ccs_age_groupmo_ccs_age_grouptime_category/hoursmo_ccs_time_categorymo_ccs_time_categoryrates/*/basemo_ccs_maximum_daily_benefitmo_ccs_maximum_daily_benefit(1–12)rates/*/special_needsmo_ccs_maximum_daily_benefitmo_ccs_maximum_daily_benefit(13)transitional/funding_ratemo_ccs_maximum_daily_benefitmo_ccs_maximum_daily_benefit(14–16)transitional/funding_ratemo_ccs_maximum_daily_benefitmo_ccs_maximum_daily_benefit(17,18);integration(3)copay/tier/size_1..20mo_ccs_copaycopay/mo_ccs_copay(9,10,13)copay/daily_fee/{full,half,part}_unitmo_ccs_copaycopay/mo_ccs_copay(1–3)copay/minimum_annual_fee,copay/smi_minimum_ratemo_ccs_copaycopay/mo_ccs_copay(5,6,11,12)mo_ccs_copaycopay/mo_ccs_copay(7)copay/tier/size_*mo_ccs_copaycopay/mo_ccs_copay(4)mo_ccsmo_ccs(1,6)mo_ccsmo_ccs(2);integration(7)mo_ccs_protective_serviceseligibility/mo_ccs_protective_servicesNot Modeled (by design)
Historical Notes
Verification TODO
region/region_N_counties.yamland Region 5 is the catch-all default.Files Added
Federal wiring edits (2):
policyengine_us/parameters/gov/hhs/ccdf/child_care_subsidy_programs.yaml— registersmo_child_care_subsidiesin the federal CCDF aggregator.policyengine_us/programs.yaml— adds the Missouri CCS program entry (variable: mo_ccs,parameter_prefix: gov.states.mo.dese.ccs,status: complete).Changelog:
changelog.d/mo-ccap.added.md.